package com.app.repository.interfaces;

import com.app.model.main.Article;

import java.util.List;

public interface ArticleMapper {
    int deleteByPrimaryKey(Long id);

    int insert(Article record);

    int insertSelective(Article record);

    Article selectByPrimaryKey(Long id);

    Article selectByParam(long userId, String time);

    int updateByPrimaryKeySelective(Article record);

    int updateByPrimaryKeyWithBLOBs(Article record);

    int updateByPrimaryKey(Article record);

    /**
     * 按时间序来获取单个用户的帖子
     */
    List<Article> getListOrderedByIdDESC(long userId, long lastId, int page, int number, byte type);

    List<Article> getListOrderedByIdASC(long userId, long lastId, int page, int number, byte type);

    /**
     * 按时间序来获取推荐的求助帖
     */
    List<Article> getListOrderedByIdWithoutUserIdDESC(long lastId, int page, int number, byte type);

    List<Article> getListOrderedByIdWithoutUserIdASC(long lastId, int page, int number, byte type);

    long getMaxId();

    List<Article> getIdListBetween(String time1, String time2, byte type);

    List<Article> getListOrderedByTimeWithoutUserIdDESC(String time, int page, int number, byte type);

    List<Article> getListOrderedByTimeWithoutUserIdASC(String time, int page, int number, byte type);

    long getArticleNumber(long userId, byte type);

    List<Article> getArticleList(long userId, byte type);

    int updateFlagByPrimaryKey(long id);

    /**
     * 修改帖子类型
     * @param id
     * @param type
     */
    int updateArticleType(long id, byte type);

    /**
     * 根据帖子类型查询测试
     */
    List<Article> getByType(Byte type);

    /**
     * 获取置顶文章时要与当前时间比较，过期的不选出来，通过系统定时去更改状态。
     * 即获取未过期的置顶帖
     * @param type  置顶帖 ->type = (Byte)8 /悬赏->(Byte)32
     * @param expiredTimeSub 现在时间减去设定的期限，如24小时   now-24小时    单位:ms
     * @return
     */
    List<Long> getUnexpiredArticle(Byte type, String expiredTimeSub);

    /**
     * 获取过期的置顶帖/悬赏贴
     * @param type  置顶帖 ->type = (Byte)8 /悬赏->(Byte)32
     * @param expiredTimeSub 现在时间减去设定的期限，如24小时   now-24小时    单位:ms
     * @return
     */
    List<Long> getExpiredArticle(Byte type, String expiredTimeSub);

    /**
     * 根据帖子类型(分享贴/求助帖)获取去除置顶贴的帖子id集合
     * @param type SHARE / HELP
     * @param top  传入置顶标志位 （byte）TOP = 8;
     * @return
     */
    List<Long> getExceptTopArticleByType(byte type, byte top);
}
